import axios from 'axios';
import { Message } from "element-ui";
import router from '../router/index'

let baseURL = '/api'    //接口请求的域名(生产和测试环境一般不同)


/**
 * 请求类型为post时请求头的请求类型默认为{headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}
 * 可按实际修改为{headers: {'Content-Type': 'application/json; charset=UTF-8'}}或者{headers: {'Content-Type': 'multipart/form-data; charset=UTF-8'}}  跟在传参后
 * 列如:
 *  export function postHome(data){
        return server.post('Home/BlocManage/auth',data,{headers: {'Content-Type': 'multipart/form-data; charset=UTF-8'}})
    }


     config.headers = {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' //配置请求头
            // 'Content-Type': 'application/json utf-8' // 配置请求头
        }
     注意使用token的时候需要引入cookie方法或者用本地localStorage等方法，推荐js-cookie
     const token = getCookie('名称');//这里取token之前，你肯定需要先拿到token,存一下
     if(token){
            config.params = {'token':token} //如果要求携带在参数中
            config.headers.token= token; //如果要求携带在请求头中
        }

 */

const server = axios.create({     //创建axios实例
    baseURL: baseURL,
    // 超时时间 单位是ms，这里设置了3s的超时时间
    timeout: 3 * 1000
})


// 添加请求拦截器
server.interceptors.request.use(config => {

    // localStorage.setItem('token','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiLogIHluIgxIiwiYXZhdGFyIjoiIiwiYXV0aG9yaXRpZXMiOlsidGVhY2hlciJdLCJjbGllbnRfaWQiOiJzdHVkZW50Iiwicm9sZV9uYW1lIjoidGVhY2hlciIsImxpY2Vuc2UiOiJwb3dlcmVkIGJ5IHBsYXRmb3JteCIsInVzZXJfaWQiOjE2LCJyb2xlX2lkIjoiMiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2MTk1MDkyNDAsImp0aSI6Ijg1NzNjM2I2LTMwOWItNGI3Mi04Y2RhLWM0OTJkNjg0ODRhOSIsImFjY291bnQiOiIxNzY3MTc4MTYyMCIsInRlbmFudF9jb2RlIjoiMDAwMDAwIn0._aPObRgpGnxs-A8oZPAKwRePNsRgk-csrfsxHDgxunM')

    const token = localStorage.getItem('token');
    if(token){
        // config.headers.token = localStorage.getItem('token')   //一般是判断是否存在token后再决定头部是否添加token
        config.headers = {
            'Authorization': 'Basic c3R1ZGVudDpzdHVkZW50X3NlY3JldA==',
            'platform-auth': 'bearer ' + token
        }
    }else{
        // 登录
        config.headers = {
            'Authorization': 'Basic c3R1ZGVudDpzdHVkZW50X3NlY3JldA=='
        }
    }

    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

server.interceptors.response.use( response => {
    // 对响应数据做点什么
    console.log(2,response);

    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据     
    // 否则的话抛出错误

    // if (response.status === 200) {
    //     return Promise.resolve(response);
    // } else {
    //     return Promise.reject(response);
    // }

    if (response.status === 200 && response.data.code === 200) {
        return Promise.resolve(response);
    } else if(response.data.code === 401){
       // 没授权 登录

        router.replace({
            path: '/login',
            query: {
                redirect: router.currentRoute.fullPath
            }
        });
    }

    // return response;
}, function (error) {
    // 对响应错误做点什么
    // 服务器状态码不是2开头的的情况
    // 这里可以跟你们的后台开发人员协商好统一的错误状态码    
    // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
    // 下面列举几个常见的操作，其他需求可自行扩展
    if (error.response.status) {
        switch (error.response.status) {
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。                
            case 401:
                // router.replace({
                //     path: '/login',
                //     query: {
                //         redirect: router.currentRoute.fullPath
                //     }
                // });
                break;

            // 403 token过期
            // 登录过期对用户进行提示
            // 清除本地token和清空vuex中token对象
            // 跳转登录页面                
            case 403:
                Message.error('登录过期，请重新登录');
                // 清除token
                localStorage.removeItem('token');
                // store.commit('loginSuccess', null);
                // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面 
                setTimeout(() => {
                    // router.replace({                            
                    //     path: '/login',                            
                    //     query: { 
                    //         redirect: router.currentRoute.fullPath 
                    //     }                        
                    // });                    
                }, 1000);
                break;

            // 404请求不存在
            case 404:
                Message.error('网络请求不存在');
                break;
            // 其他错误，直接抛出错误提示
            default:
                Message.error(error.response.data.message);
        }
        return Promise.reject(error.response);
    }
    // return Promise.reject(error);
});


export default server
